package com.hean.util;

import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;

import android.util.Log;

public class DownloadThread extends Thread{
	private static final String TAG="DownloadThread";
	private RandomAccessFile saveFile;
	private URL downUrl;
	private int block;
	/*下载开始位置*/
	private int startPos;
	private int threadId=-1;
	private int downLength;
	private boolean finish=false;
	private FileDownloader downloader;
	
	public DownloadThread(RandomAccessFile saveFile, URL downUrl, int block,
			int startPos, int threadId, int downLength,
			FileDownloader downloader) {
		this.saveFile = saveFile;
		this.downUrl = downUrl;
		this.block = block;
		this.startPos = startPos;
		this.threadId = threadId;
		this.downLength = startPos-(block*(threadId-1));
		this.downloader = downloader;
	}
	
	@Override
	public void run() {
		if(downLength<block){//未下载完成
			try {
				HttpURLConnection http=(HttpURLConnection) downUrl.openConnection();
				http.setRequestMethod("GET");
				http.setRequestProperty("Accept", "image/*");
				http.setRequestProperty("Accept-Language", "zh-CN");
				http.setRequestProperty("Referer", downUrl.toString());
				http.setRequestProperty("Charset", "UTF-8");
				http.setRequestProperty("Range", "bytes"+startPos+"-");
				http.setRequestProperty("User-Agent", "....");
				http.setRequestProperty("Connection", "Keep-Alive");
				
				InputStream inputStream=http.getInputStream();
				int max=block>1024?1024:(block>10?10:1);
				byte[] buffer=new byte[max];
				int offset=0;
				print("线程"+threadId+"从位置"+startPos+"开始下载");
				while(downLength<block&&(offset=inputStream.read(buffer,0,max))!=-1){
					saveFile.write(buffer,0,offset);
					downLength+=offset;
					downloader.update(threadId, block*(threadId-1)+downLength);
					downloader.saveLogFile();
					downloader.append(offset);
					int spare=block-downLength;//求剩下的字节数
					if(spare<max)
						max=spare;
				}
				saveFile.close();
				inputStream.close();
				print("线程"+threadId+"完成下载");
				finish=true;
				interrupt();
				
			} catch (Exception e) {
				downLength=-1;
				print("线程"+threadId+":"+e);
			}
		}
	}
	
	private static void print(String msg){
		Log.i(TAG, msg);
	}
	
	
	/**
	 * 下载是否完成
	 */
	public boolean isFinish(){
		return finish;
	}
	/**
	 * 已经下载的内容大小
	 * @return 如果返回值为－1，代表下载失败
	 */
	public long getDownLength(){
		return downLength;
	}
}
